package com.kakarote.examine.service;

import com.kakarote.core.entity.BasePage;
import com.kakarote.core.feign.oa.entity.ExamineVO;
import com.kakarote.core.servlet.BaseService;
import com.kakarote.examine.entity.BO.ExaminePageBO;
import com.kakarote.examine.entity.PO.Examine;
import com.kakarote.examine.entity.VO.ExamineAllVo;
import com.kakarote.examine.entity.VO.SuperExamineRecordVO;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 超级审批 服务类
 * </p>
 *
 * @author zhangzhiwei
 * @since 2020-11-13
 */
public interface ISuperExamineToDoService extends BaseService<Examine> {

    /**
     * 待办-待我审批
     */
    BasePage<ExamineVO> selectToDoMe(ExaminePageBO examinePageBO);

    /**
     * 待办-抄送给我
     */
    BasePage<ExamineVO> selectCopyMe(ExaminePageBO examinePageBO);

    /**
     * 归档-我申请的
     */
    BasePage<ExamineVO> selectEndMe(ExaminePageBO examinePageBO);

    /**
     * 归档-经我审批
     */
    BasePage<ExamineVO> selectEndAudit(ExaminePageBO examinePageBO);

    /**
     * 归档-我关注的
     */
    BasePage<ExamineVO> selectEndFollow(ExaminePageBO examinePageBO);

    /**
     * 归档-作废的
     */
    BasePage<ExamineVO> selectEndToVoid(ExaminePageBO examinePageBO);

    /**
     * 归档-抄送给我的
     */
    BasePage<ExamineVO> selectEndCopy(ExaminePageBO examinePageBO);

    SuperExamineRecordVO queryExamineRecordList(Long recordId, Long ownerUserId, String outExamineEmail, Integer examineRecordTypeIdStyle);
    /**
     * 跟踪-我申请的
     */
    BasePage<ExamineVO> selectTrackMe(ExaminePageBO examinePageBO);

    /**
     * 跟踪-经我审批的
     */
    BasePage<ExamineVO> selectTrackDo(ExaminePageBO examinePageBO);

    /**
     * 跟踪-抄送给我的
     */
    BasePage<ExamineVO> selectTrackCopy(ExaminePageBO examinePageBO);

    /**
     * 设置审批已读
     */
    void setRecordLogRead(Long recordId, Long userId, String outExamineEmail, Integer examineRecordTypeIdStyle);

    /**
     * 代办我申请的导出
     *
     * @param examinePageBO
     * @return
     */
    List<Map<String, Object>> exportExamineDoMeInfo(ExaminePageBO examinePageBO);

    /**
     * 代办抄送我的的导出
     *
     * @param examinePageBO
     * @return
     */
    List<Map<String, Object>> exportExamineCopyMeInfo(ExaminePageBO examinePageBO);

    /**
     * 跟踪我申请的导出
     *
     * @param examinePageBO
     * @return
     */
    List<Map<String, Object>> exportExamineTrackMeInfo(ExaminePageBO examinePageBO);

    /**
     * 跟踪经我审批的导出
     *
     * @param examinePageBO
     * @return
     */
    List<Map<String, Object>> exportExamineTrackDoInfo(ExaminePageBO examinePageBO);

    /**
     * 跟踪抄送我的导出
     *
     * @param examinePageBO
     * @return
     */
    List<Map<String, Object>> exportExamineTrackCopyInfo(ExaminePageBO examinePageBO);

    /**
     * 归档我的申请导出
     *
     * @param examinePageBO
     * @return
     */
    List<Map<String, Object>> exportExamineEenMeInfo(ExaminePageBO examinePageBO);


    /**
     * 归档经我审批导出
     *
     * @param examinePageBO
     * @return
     */
    List<Map<String, Object>> exportExamineEenAuditInfo(ExaminePageBO examinePageBO);

    /**
     * 归档我的关注导出
     *
     * @param examinePageBO
     * @return
     */
    List<Map<String, Object>> exportExamineEenFollowInfo(ExaminePageBO examinePageBO);

    /**
     * 导出归档作废的
     *
     * @param examinePageBO
     * @return
     */
    List<Map<String, Object>> exportExamineEenTovoIdInfo(ExaminePageBO examinePageBO);

    List<Map<String, Object>> exportExamineEenCopyInfo(ExaminePageBO examinePageBO);

    List<Map<String, Object>> getExportField(Long categoryId);

    BasePage<ExamineAllVo> queryAllExamine(ExaminePageBO examinePageBO);
    /**
     * 导出所有流程
     */
    List<Map<String, Object>> exportAllExamine(ExaminePageBO examinePageBO);
}
